package cn.echo.consul.manager.service;

import cn.echo.consul.manager.entity.Claim;
import cn.echo.consul.manager.entity.Token;

/**
 * 访问token服务接口
 * @author lonyee
 */
public interface AccessTokenService {

    /**
     * 加密生成token
     *
     * @param payload 加密传输内容
     * @return token
     */
    <T> Token genToken(T payload);

    /**
     * 加密生成token
     * @param payload 加密传输内容
     * @param expire 过期时间 秒
     * @return token
     */
    <T> Token genToken(T payload, Long expire);

    /**
     * 刷新获取新token
     * @param token 加密串token
     * @return token
     */
    Token refreshToken(String token);

    /**
     * 验证token
     * @param token 加密串token
     * @return boolean
     */
    boolean verifyToken(String token);

    /**
     * 解密token获取Claim
     * @param token 加密串token
     * @return payload
     */
    Claim getClaim(String token);

    /**
     * 解密token获取携带数据
     * @param token 加密串token
     * @return payload
     */
    <T> T getPayload(String token, Class<T> clazz);

    /**
     * 解密token获取过期时间（不校验） expire
     * @param token 加密串token
     * @return expire
     */
    long getExpire(String token);

    /**
     * 获取短token，降低存储空间
     */
    String shortToken(String token);
}
